package prototype.actors.framework;

import prototype.roles.Client;

import java.util.HashMap;

/**
 * @author chj
 * 类名：Manager
 * 类型：具体类
 * 类含义：表示使用Product对象来复制实例的对象。
 * 设计模式角色：Client
 */
public class Manager implements Client {
    /**
     * @author chj
     * 属性含义：保存原型名与原型之间的关系
     */
    private final HashMap<String, Product> showcase = new HashMap<>();

    /**
     * @author chj
     * 方法含义：表示“注册原型”操作，将接受到的原型名和原型注册到showcase中。
     */
    public void register(String name, Product prototype) {
        showcase.put(name, prototype);
    }

    /**
     * @author chj
     * 方法含义：表示“通过原型名创建实例”操作，根据接收到的原型名从showcase取出原型进行复制。
     * @return 复制得到的实例
     */
    public Product create(String prototypeName) {
        Product p = (Product) showcase.get(prototypeName);
        return p.createClone();
    }
}
